package io;

import java.io.File;
import java.util.Scanner;

/**
 * @User: vitobo
 * @Date: 2024-08-13
 * @Description: 案例1
 *  扫描指定目录，并找到名称中包含指定字符的所有普通文件（不包含目录），
 *  并且后续询问用户是否要删除该文件
 *
 */

public class IODemo11 {
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        // 让用户输入一个指定搜索的目录
        System.out.println("请输入要搜索的路径: ");
        String bashPath = scanner.next();

        // 针对用户输入进行简单判定
        File root = new File(bashPath);
        if(! root.isDirectory()){
            // 路径不存在, 或者只是一个普通文件, 此时无法进行搜索
            System.out.println("输入的目录有误");
            return;
        }

        // 再让用户输入一个要删除的文件名
        System.out.println("请输入要删除的文件名: ");
        String nameToDelete = scanner.next();

        // 针对指定的路径进行扫描, 递归操作;
        // 先从根目录出发,
        // 先判定一下,当前的这个目录里面,是否包含要删除的文件,如果是就删除, 否则跳过下一个
        // 如果当前这里包含了一些目录, 再对子目录进行递归;
        scanDir(root, nameToDelete);
    }

    private static void scanDir(File root, String nameToDelete) {
        System.out.println("[scanDir] " + root.getAbsolutePath());;
        // 1.先列出root下的文件和目录
        File[] files = root.listFiles();
        if(files == null){
            // 空目录, 结束递归
            return;
        }

        // 2.遍历当前的列出结果
        for(File f : files){
            if(f.isDirectory()){
                // 如果是目录, 就 进一步递归
                scanDir(f, nameToDelete);
            }else {
                // 如果是普通文件, 则判定是否要删除
                if(f.getName().contains(nameToDelete)){
                    System.out.println("确定是否要删除 " + f.getAbsolutePath() + "吗?");
                    String choice = scanner.next();
                    if(choice.equals("y") || choice.equals("Y")){
                        f.delete();
                        System.out.println("删除成功! ");
                    }else {
                        System.out.println("取消删除! ");
                    }
                }
            }
        }
    }
}
